package es.webapp.exiquets.web;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import es.webapp.exiquets.domain.entities.Categoria;
import es.webapp.exiquets.domain.entities.Producto;
import es.webapp.exiquets.domain.webforms.CategoriaWebForm;
import es.webapp.exiquets.domain.webforms.ListaCategoriasWebForm;
import es.webapp.exiquets.domain.webforms.ProductoForm;
import es.webapp.exiquets.domain.webforms.ProductosForm;
import es.webapp.exiquets.service.GestorProductos;
 
@Controller
@RequestMapping(value="/admin/productos/*")
public class GestorProductosController {
 
	@Autowired
	GestorProductos gestorProductos;
	
	@RequestMapping(method = RequestMethod.GET)
	public ModelAndView listarProductos(ModelMap model) {
		List<ProductoForm> listaProductos = new ArrayList<ProductoForm>();
		for(Producto p : gestorProductos.getProductos()){
			listaProductos.add(new ProductoForm(p));
		}
		
		ProductosForm productosForm = new ProductosForm();
		productosForm.setProductos(listaProductos);
		
		ModelAndView vista = null;
		List<Categoria> listaCatetorias = gestorProductos.listaCategorias();
		
		if(listaCatetorias.size() == 0){
			vista = new ModelAndView("redirect:/admin/productos/gestorCategorias");
		}else{
			vista = new ModelAndView("admin/productos/listaProductos","listaProductos",productosForm);
			vista.addObject("categorias", listaCatetorias);
		}
        
		return vista;
	}
	
	@RequestMapping(method = RequestMethod.POST)
	public String registrarProducto(@ModelAttribute("listaProductos") ProductosForm productos) {
		
		
		for(ProductoForm pf : productos.getProductos()){
			if(!pf.getNombre().equalsIgnoreCase("")){
				pf.setCategoriaBean(new Categoria(gestorProductos.getCategoria(pf.getCategoriaBean().getIdCategorias())));
				if(pf.isSeleccionado()){
					gestorProductos.eliminarProducto(new Producto(pf));
				}
				else if(pf.getIdProductos() != 0){
					gestorProductos.updateProductos(new Producto(pf));
				}else{
					gestorProductos.registraProducto(new Producto(pf));
				}
			}
		}
		
		
		return "redirect:/admin/productos/listaProductos";
 
	}
	
	@RequestMapping(value="/admin/productos/gestorCategorias",method = RequestMethod.GET)
	public ModelAndView altaCategoria(ModelMap model) {
		ListaCategoriasWebForm listaCategorias = new ListaCategoriasWebForm();
		listaCategorias.addAllCategoria(gestorProductos.listaCategorias());
		
		ModelAndView vista = new ModelAndView("admin/productos/listaCategorias","listaCategorias",listaCategorias);

		return vista;
	}
	
	@RequestMapping(value="/admin/productos/gestorCategorias",method = RequestMethod.POST)
	public String registraCategoria(@ModelAttribute("listaCategorias") ListaCategoriasWebForm  listaCategorias) {
		
		for(CategoriaWebForm c : listaCategorias.getCategorias()){
			if(!"".equalsIgnoreCase(c.getNombreCategoria())){
				Categoria categoriaEntity = new Categoria(c);
				if(c.isSeleccionada()){
					gestorProductos.deleteCategoria(categoriaEntity);
				}else if(c.getIdCategoria()!=0){
					gestorProductos.updateCategoria(categoriaEntity);
				}else{
					gestorProductos.altaCategoria(categoriaEntity);			
				}
			}
		}
		
		return "redirect:/admin/productos/gestorCategorias";
 
	}
	
}